package com.guigu.gcservice.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.guigu.commonutils.R;
import com.guigu.gcservice.entity.*;
import com.guigu.gcservice.service.GongchengService;
import io.swagger.annotations.ApiOperation;
import org.apache.xmlbeans.GDateSpecification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.lang.Math;
import java.math.*;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author testjava
 * @since 2021-03-31
 */
@RestController
@RequestMapping("/gcservice/gongcheng")
@CrossOrigin
public class GongchengController {

    @Autowired
    private GongchengService gongchengService;





    //保存工程
    @PostMapping("creat")
    public R creatgongcheng(@RequestBody Gongcheng gongcheng){
        boolean save = gongchengService.save(gongcheng);
//        Gongcheng gongcheng1 = new Gongcheng();
        double a = gongcheng.getCount().doubleValue();
        double b = gongcheng.getLength().doubleValue();
        System.out.println(gongcheng.getCount().doubleValue());
        System.out.println(gongcheng.getDate1());

        if(save){
            return R.ok();
        }else{
            return R.error();
        }

    }



    @PostMapping("tufang")
    public R tufang(@RequestBody tufangkaiwa tufangkaiwa){
        double c = tufangkaiwa.getC().doubleValue();
        double j = tufangkaiwa.getJ().doubleValue();
        double q = tufangkaiwa.getQ().doubleValue();
        double r = tufangkaiwa.getR().doubleValue();
        double k =  1.25;

        double ang = ((45-j/2) * Math.PI) / 180;
        System.out.println(StrictMath.tan(ang));
        double h =  2*c/(k*r*StrictMath.tan(ang))-q/r;
        tufangkaiwa.setH(h);
//        System.out.println(h);
        System.out.println("本工程的基坑土方立直壁最大开挖高度为"+tufangkaiwa.getH());
        return R.ok().data("tufangkaiwa",tufangkaiwa);
    }

    //登录的接口==========================================================
    //login
    @PostMapping("login")
    public R login(){
        System.out.println("登录成功 ");
        return R.ok().data("token","admin");
    }
    //info
    @GetMapping("info")
    public R info(){
        return R.ok().data("roles","[admin]").data("name","admin").data("avatar","https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
    }
 //登录。。。。。。。。。。。。。。。。。。。。。。。。。。




    //混凝土对模板的侧向压力
    @PostMapping("muban")
    public R muban(@RequestBody muban muban,qiangdu qiangdu){
        double r = muban.getR().doubleValue();
        double t = muban.getT().doubleValue();
        double b1 = muban.getB1().doubleValue();
        double b2 = muban.getB2().doubleValue();
        double v = muban.getV().doubleValue();
        double h = muban.getH().doubleValue();
        double RL = 0.9;
        double r0 = 1.0;
        double q = 2.0;
        Double G =Math.min(0.22*r*t*b1*b2*Math.pow(v,0.5),r*h);
        muban.setG(G);
        Double G1 = 0.22*r*t*b1*b2*Math.pow(v,0.5);//计算a的b次方
        muban.setG1(G1);
        System.out.println(G1);

        Double G2 = r*h;
        muban.setG2(G2);
        System.out.println(G2);

        Double d = Math.pow(2,0.5);
        System.out.println(d);
        Double S = r0*(1.3*G+RL*1.5*q);
        System.out.println(S);
        muban.setS(S);
        qiangdu.setS(S);
        return R.ok().data("muban",muban);
    }



    //面板强度验算
    @PostMapping("qiangdu")
    public R qiangdu(@RequestBody qiangdu qiangdu){
        if(qiangdu.getS() != null){
            double b = qiangdu.getB().doubleValue();
            double a = qiangdu.getA().doubleValue();
            double h = qiangdu.getH().doubleValue();
            double i = qiangdu.getI().doubleValue();
            double w = qiangdu.getW().doubleValue();
            double e = qiangdu.getE().doubleValue();
            double x = qiangdu.getX().doubleValue();
            double l = qiangdu.getL().doubleValue();
            double f = 205;
            double ff = qiangdu.getRegion().doubleValue();
            double s = qiangdu.getS().doubleValue();
            System.out.println(s);
            System.out.println(b);
            System.out.println(ff);

            double q = ff*b*s;
            qiangdu.setQ(q);
            System.out.println(q);
            return R.ok().data("qiangdu",qiangdu);
        }else {
            return R.error();
        }
    }








    //3,分页查询方法
    //current 当前页
    //limit   每页记录数
//    @Cacheable(value = "row", key = "'index'")
    @ApiOperation(value = "分页查询数据方法")
    @PostMapping("gongchengpage/{current}/{limit}")
    public R pageListTeacher(@PathVariable long current,
                             @PathVariable long limit){
        //创建page对象
        Page<Gongcheng> page = new Page<>(current,limit);
        //调用方法实现分页
        //调用方法时候底层封装，把分页所有数据封装到pageTeacher对象里面
        gongchengService.page(page,null);
        long total = page.getTotal();//总记录数
        List<Gongcheng> records = page.getRecords();//数据list集合
        System.out.println(records);
        return R.ok().data("total",total).data("row",records);

    }


    //删除记录
    @DeleteMapping("{Id}")
    public R delete(@PathVariable String Id) {
        gongchengService.removeById(Id);
        return R.ok();
    }

    //根据id查看记录
    @PostMapping("showId/{id}")
    public R showId(@PathVariable String id){
        Gongcheng gongcheng = gongchengService.getById(id);
        if(gongcheng!=null){
            System.out.println(gongcheng);
            return R.ok().data("gongcheng",gongcheng);
        }else {
            return R.error();

        }
    }

    //根据id更新修改记录
    @PostMapping("update")
    public R update(@RequestBody Gongcheng gongcheng){
        boolean flag = gongchengService.updateById(gongcheng);
        System.out.println(flag);
        return R.ok();
    }

    //简支梁设计
    @PostMapping("jianzhiliang")
    public R jianzhiliang(@RequestBody ql ql){
        //double Q = ql.getQ().doubleValue();
        double R1 =ql.getR1().doubleValue();
        double R2 =ql.getR2().doubleValue();
        double B =ql.getB().doubleValue();
        double GK=ql.getGK().doubleValue();
        double QK=ql.getQK().doubleValue();
        double A=ql.getA().doubleValue();
        double I=ql.getI().doubleValue();
        double WX=ql.getWX().doubleValue();
        double g=ql.getG().doubleValue();
        //double F=ql.getF().doubleValue();
        //double t=ql.getT().doubleValue();
        double E=ql.getE().doubleValue();
        double L=ql.getL().doubleValue();
        double RS=ql.getRS().doubleValue();

        //承载能力极限状态
        double Q1=R1*(GK*B+g)+R2*QK*B;
        ql.setQ1(Q1);
        //正常使用极限状态：
        double Q2=GK*B+g+B*QK;
        ql.setQ2(Q2);
        //1、抗弯验算
        double M=Q1*Math.pow(L,2)/8;
        ql.setM(M);
        double Mmax=M*Math.pow(10,6)/(RS*WX*Math.pow(10,3));
        ql.setM1(Mmax);

        //2、挠度验算
        double v =5*(Q2*Math.pow(L*1000,4))/384*(E*(I*10000));
        ql.setV(v);
        System.out.println(String.format("%.3f",v));

        return R.ok().data("ql",ql);
    }


}

